﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Data;
using System.Data.SqlClient;
using System.Configuration;
using Negocio.AccesoDatos;
using Negocio.Entidades;

namespace Negocio.Gestores
{
    public class GestorCliente
    {

        public static void GrabarCliente(Cliente cliente)
        {
            
            try
            {
                Validar(cliente);
                ClientesDAO.grabarCliente(cliente);
               
            }
            catch (Exception ex)
            {
                if (ex.Message.Contains("UX_"))
                    throw new Exception("Ya existe un cliente con ese Nro. de DOCUMENTO. ");
                else
                    throw new ApplicationException("Error al grabar un cliente " + ex.Message.ToString());
                
            }
        }

        public static DataTable obtenerTipoIVA()
        {
            return AccesoADatos.consultarSQL("SELECT id_tipoIVA, descripcion FROM TipoIVA");
        }

        public static DataTable obtenerTipoPago()
        {
            return AccesoADatos.consultarSQL("SELECT id_tipoPago, descripcion FROM TipoPago");
        }

        private static void Validar(Cliente cliente)
        {
            
            string errores = "";
            if (cliente.Nombre.Length < 1 || cliente.Nombre.Length > 30)
                errores += "El nombre debe tener entre 10 y 30 caracteres <br>";
            if (cliente.Apellido.Length < 1 || cliente.Apellido.Length > 30)
                errores += "El nombre debe tener entre 10 y 30 caracteres <br>";
            if (errores != "")
                throw new Exception(errores);
        }

        public static Cliente obtenerCliente(int IdCliente)
        {
            try
            {
                return ClientesDAO.obtenerCliente(IdCliente);
            }
            catch (Exception ex)
            {

                throw new ApplicationException(ex.Message);
            }
        }

        public static void EliminarCliente(int IdCliente)  // este metodo no devuelve nada, si hay que informar algun evento anomalo usar una excepcion.
        {
            try
            {
                ClientesDAO.eliminarCliente(IdCliente);

            }
            catch (Exception ex)
            {
                if (ex.Message.Contains("FK_"))
                    throw new Exception("No puede borrarse porque tiene tablas asociadas. ");
                else
                    throw new ApplicationException("Error al ejecutar la transaccion en la Base de Datos. " + ex.Message.ToString());
            }
        }

        public static List<Cliente> ObtenerTodos()
        {
            try
            {
                return ClientesDAO.obtenerTodos();
            }
            catch (Exception ex)
            {

                throw new ApplicationException(ex.Message);
            }
  
        }
    }
}